#coding:utf-8

import math
from functools import reduce

def log(f):
    def fn(*args,**kwargs):
        print('call '+f.__name__+'()...')
        return f(*args,**kwargs)
    return fn

print(log(math.acos)(1))

@log
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print (factorial(10))